# Copyright (c) 2010
# The Regents of the University of Michigan
# All Rights Reserved

# Permission is granted to use, copy, create derivative works, and
# redistribute this software and such derivative works for any purpose,
# so long as the name of the University of Michigan is not used in
# any advertising or publicity pertaining to the use or distribution
# of this software without specific, written prior authorization. If
# the above copyright notice or any other identification of the
# University of Michigan is included in any copy of any portion of
# this software, then the disclaimer below must also be included.

# This software is provided as is, without representation or warranty
# of any kind either express or implied, including without limitation
# the implied warranties of merchantability, fitness for a particular
# purpose, or noninfringement.  The Regents of the University of
# Michigan shall not be liable for any damages, including special,
# indirect, incidental, or consequential damages, with respect to any
# claim arising out of or in connection with the use of the software,
# even if it has been or is hereafter advised of the possibility of
# such damages.

from pydht import dht, dhtutil
from dhtutil import intify

class Contact(object):
  def __init__(self, addrport):
    self.addrport = addrport
    self._dht_id = None
    self.failures = 0
    self._seen = False
    self.spoof_id = None

  @property
  def dht_id(self):
    if self._dht_id is None:
      self._dht_id = dht.compute_node_id(*self.addrport)
    return self._dht_id

  def __eq__(self, other):
    if isinstance(other, long):
      return intify(self.dht_id) == other
    return self.dht_id == other.dht_id

  def seen(self):
    # TODO: stub; should be time-oriented
    self._seen = True
    self.failures = 0

  def didnt_respond(self):
    self.failures += 1
    return self.failures
